home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / jpi / internet.bas < prev    next >
Encoding:
BASIC Source File  |  1998-01-27  |  14.0 KB  |  403 lines

  1. Attribute VB_Name = "Internet"
  2. Global Const SERVERINDEX = 1
  3.  
  4. Public Const DefaultPort = 4000
  5. Public Const MAXDATALINES = 50
  6.  
  7. Public ReceivedDataCodes(MAXDATALINES) As Integer
  8. Public ReceivedData(MAXDATALINES) As String
  9. Public DataLines As Integer
  10.  
  11. Private Type ServDat
  12.   ConnectedToServer As Boolean
  13.   ServerIP As String
  14.   ServerPort As Integer
  15. End Type
  16. Public ServerData As ServDat
  17.  
  18. Global Const CODE_ASSIGNPLAYERINDEX = 1000
  19. Global Const CODE_ASSIGNPLAYERNICKNAME = 1001
  20. 'For the user being killed,
  21. 'preceeds a kill message
  22. Global Const CODE_USERLOGINFAILED = 1003
  23. 'an acceptance flag
  24. Global Const CODE_USERACCEPTED = 1004
  25. 'For everyone else
  26. Global Const CODE_PLAYERKILLEDFROMSERVER = 1002
  27. 'LeavingServer
  28. Global Const CODE_LOGOFF = 1005
  29. Global Const CODE_MESSAGE = 1006
  30.  
  31. Global Const CODE_SUICIDE = 1007
  32.  
  33. Global Const CODE_SERVERSHUTDOWN = 1008
  34.  
  35. Global Const CODE_JOININGGAME = 1010
  36.  
  37. 'Game codes
  38. Global Const CODE_EVENT = 1009
  39.  
  40.  
  41. Public MaxMessages As Integer
  42. Type IncomingMessages
  43.   TextLines(10) As String
  44.   LinesActive(10) As Boolean
  45. End Type
  46. Public InternetMessageBox As IncomingMessages
  47. Public Sub LaunchInternetGameConsole()
  48. Const NoBox = 0
  49. Const Messagebox = 1
  50. Const PortBox = 2
  51. Const NickBox = 3
  52. Const BTN_Disconnect = 1
  53. Const BTN_Join = 2
  54. MaxMessages = 7
  55. nicktext = LocalPlayer.NickName
  56. porttext = Internet.ServerData.ServerPort
  57. TextX = 23
  58. ViewForm.KeyboardInputBox.Text = ""
  59. Do
  60.   Call GraphicsEngine.TilePic(InGameConstants(InGameConstant_PICINDEX_ProgramBackground))
  61.   DoEvents
  62.   If KeyStates(KEY_UP) = True Then
  63.     focus = focus - 1
  64.     KeyStates(KEY_UP) = False
  65.     If focus < 1 Then focus = 1
  66.     If focus = Messagebox Then
  67.       ViewForm.KeyboardInputBox.Text = Messageboxtext
  68.       ViewForm.KeyboardInputBox.SelStart = Len(ViewForm.KeyboardInputBox.Text)
  69.     End If
  70.   End If
  71.   If KeyStates(KEY_DOWN) = True Then
  72.     focus = focus + 1
  73.     KeyStates(KEY_DOWN) = False
  74.     If focus = Messagebox Then
  75.       ViewForm.KeyboardInputBox.Text = Messageboxtext
  76.       ViewForm.KeyboardInputBox.SelStart = Len(ViewForm.KeyboardInputBox.Text)
  77.     End If
  78.     If focus > 1 Then focus = 1 'maximum focus index
  79.   End If
  80.   
  81.   If KeyStates(KEY_ESCAPE) = True Then
  82.     KeyStates(KEY_ESCAPE) = True
  83.     Button = BTN_CANCEL
  84.     Exit Do
  85.   End If
  86.   
  87.   If KeyStates(KEY_ENTER) = True Then
  88.     KeyStates(KEY_ENTER) = False
  89.     If focus = Messagebox Then
  90.       Call Internet.TransmitMessage(Messageboxtext)
  91.       ViewForm.KeyboardInputBox.Text = ""
  92.     Else
  93.       focus = NoBox
  94.     End If
  95.   End If
  96.   
  97.   If Mouse.ButtonStates(1) = True Then
  98.     If Mouse.Position.Y > 123 Then
  99.       If Mouse.Position.Y < 123 + FONT_SPACINGY Then
  100.         focus = Messagebox
  101.         ViewForm.KeyboardInputBox.Text = Messageboxtext
  102.         ViewForm.KeyboardInputBox.SelStart = Len(ViewForm.KeyboardInputBox.Text)
  103.       End If
  104.     End If
  105.     If Mouse.Position.Y > 123 + (FONT_SPACINGY * 4) Then
  106.       If Mouse.Position.Y < 123 + (FONT_SPACINGY * 5) Then
  107.         If Mouse.Position.X > TextX Then
  108.           If Mouse.Position.X < TextX + (FONT_SPACINGX * 12) Then
  109.             Button = BTN_Disconnect
  110.             Exit Do
  111.           End If
  112.         End If
  113.         If Mouse.Position.X > TextX + (FONT_SPACINGX * 29) Then
  114.           If Mouse.Position.X < TextX + (FONT_SPACINGX * 34) Then
  115.             Button = BTN_Join
  116.             Exit Do
  117.           End If
  118.         End If
  119.       End If
  120.     End If
  121.   End If
  122.   
  123.   If focus = Messagebox Then Messageboxtext = ViewForm.KeyboardInputBox.Text
  124.   
  125.   If GameInterface.KeyStates(KEY_ESCAPE) = True Then Exit Do
  126.   
  127.   
  128.   Call GraphicsEngine.DisplayText("IP: " & ServerData.ServerIP & ", PORT: " & ServerData.ServerPort, 0, 0, 0)
  129.   texty = 123
  130.   
  131.   Pcol = 0
  132.   Offst = "( ) "
  133.   If focus = Messagebox Then Offst = "(X) ": Pcol = PALLETE_WHITE
  134.   Call GraphicsEngine.DisplayText(Offst & "Send Message: " & Messageboxtext, TextX, texty, Pcol)
  135.   
  136.   Pcol = 0
  137.   texty = texty + FONT_SPACINGY
  138.   texty = texty + FONT_SPACINGY
  139.  
  140.   texty = texty + FONT_SPACINGY
  141.   Call GraphicsEngine.DisplayText("----------------------------------", TextX, texty, 0)
  142.   texty = texty + FONT_SPACINGY
  143.   Call GraphicsEngine.DisplayText("(DISCONNECT)                (JOIN)", TextX, texty, 0)
  144.   
  145.   
  146.   TextX2 = 27
  147.   texty = 26
  148.   For I = 1 To MaxMessages
  149.     If InternetMessageBox.LinesActive(I) = True Then
  150.       Call GraphicsEngine.DisplayText(InternetMessageBox.TextLines(I), TextX2, texty, PALLETE_WHITE)
  151.       texty = texty + FONT_SPACINGY
  152.     End If
  153.   Next I
  154.   Call GraphicsEngine.GethDC
  155.   Call GraphicsEngine.DrawBox(20, 23, 300, 113, 255, 255, 255, 0, 0, 0, LINEMODE_NORMAL)
  156.   Call GraphicsEngine.ReleasehDC
  157.   
  158.   Call DrawCursor
  159.   Call GraphicsEngine.SwapScreen
  160. Loop
  161. Mouse.ButtonStates(1) = False
  162. Select Case Button
  163. Case BTN_Join
  164.   Internet.SendData CODE_JOININGGAME, "woohoo"
  165.   MessageWindow.Caption = "JPI"
  166.   MessageWindow.Text = "Loading..."
  167.   Call GraphicsEngine.DisplayMessageWindow
  168.   Call GraphicsEngine.SwapScreen
  169.   Call GameEngine.StartNewInternetGame(1)
  170.   Exit Sub
  171. Case BTN_Disconnect
  172.   Call Internet.Disconnect
  173.   Exit Sub
  174. End Select
  175. End Sub
  176. Public Sub NewInternetGameConsole()
  177. If LaunchInternetConnectConsole = True Then
  178.   Call LaunchInternetGameConsole
  179. Else
  180.   Exit Sub
  181. End If
  182. End Sub
  183. Public Function LaunchInternetConnectConsole() As Boolean
  184. Dim MenuInterface As GameInterface.InterfaceObj, ReturnedInterface As GameInterface.InterfaceReturnObj
  185. texty = (GameInterface.HALFINTERFACEHEIGHT - 95) + 1
  186. PicY = texty + (1 * FONT_SPACINGY) + (FONT_SPACINGY / 2)
  187. FontX = GameInterface.HALFINTERFACEWIDTH - 58
  188. FontY = (texty) + Pics(InGameConstants(InGameConstant_PICINDEX_JPILogoRed)).Height + 4
  189. BTNSIZE = FONT_SPACINGY - 1
  190. TEXTSPACING = FONT_SPACINGY + 3
  191. MenuInterface.BackgroundPic = InGameConstants(InGameConstant_PICINDEX_ProgramBackground)
  192. MenuInterface.Controls.ControlAmount = 13
  193.  
  194. ControlNumber = ControlNumber + 1
  195. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(GameInterface.CONTROLTYPE_PICTUREBOX, GameInterface.HALFINTERFACEWIDTH, PicY, Pics(InGameConstants(InGameConstant_PICINDEX_JPILogoRed)).Width, Pics(InGameConstants(InGameConstant_PICINDEX_JPILogoRed)).Height, InGameConstants(InGameConstant_PICINDEX_JPILogoRed))
  196.  
  197. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  198. Text = "IP"
  199. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_LABEL, HALFINTERFACEWIDTH - 70, texty, 140, BTNSIZE, Text)
  200.  
  201. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  202. Text = ServerData.ServerIP
  203. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_TEXTBOX, HALFINTERFACEWIDTH, texty, 15, 1, Text)
  204.  
  205. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  206. Text = "PORT"
  207. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_LABEL, HALFINTERFACEWIDTH - 70, texty, 140, BTNSIZE, Text)
  208.  
  209. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  210. Text = ServerData.ServerPort
  211. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_TEXTBOX, HALFINTERFACEWIDTH, texty, 15, 1, Text)
  212.  
  213. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  214. Text = "NICKNAME"
  215. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_LABEL, HALFINTERFACEWIDTH - 70, texty, 140, BTNSIZE, Text)
  216.  
  217. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  218. Text = LocalPlayer.NickName
  219. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_TEXTBOX, HALFINTERFACEWIDTH, texty, 15, 1, Text)
  220.  
  221. linenumber = linenumber + 1
  222. linenumber = linenumber + 1
  223. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  224. Text = "OK"
  225. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_BUTTONLARGE, HALFINTERFACEWIDTH - 70, texty, 140, BTNSIZE, Text)
  226.  
  227. ControlNumber = ControlNumber + 1: texty = FontY + (linenumber * TEXTSPACING): linenumber = linenumber + 1
  228. Text = "CANCEL"
  229. MenuInterface.Controls.ControlObjects(ControlNumber) = GameInterface.CreateControl(CONTROLTYPE_BUTTONLARGE, HALFINTERFACEWIDTH - 70, texty, 140, BTNSIZE, Text)
  230.  
  231. Do
  232.     ReturnedInterface = GameInterface.RunStaticInterface(MenuInterface)
  233.     For I = 1 To ReturnedInterface.Controls.ControlAmount
  234.       If ReturnedInterface.Controls.ControlObjects(I).ControlProperties.Properties(CONTROLPROPERTY_STATE) = True Then
  235.         If ReturnedInterface.Controls.ControlObjects(I).ControlType = CONTROLTYPE_BUTTONLARGE Then
  236.           ButtonPressed = I
  237.           Exit Do
  238.         End If
  239.       End If
  240.       If ReturnedInterface.Canceled = True Then
  241.         ButtonPressed = 9
  242.         Exit Do
  243.       End If
  244.     Next I
  245. Loop
  246. Select Case ButtonPressed
  247. Case 9
  248.   LaunchInternetConnectConsole = False
  249.   Exit Function
  250. Case 8
  251.   LocalPlayer.NickName = MenuInterface.Controls.ControlObjects(7).ControlProperties.Properties(CONTROLPROPERTY_TEXT)
  252.   Call Internet.ConnectToServer(MenuInterface.Controls.ControlObjects(3).ControlProperties.Properties(CONTROLPROPERTY_TEXT), Val(MenuInterface.Controls.ControlObjects(5).ControlProperties.Properties(CONTROLPROPERTY_TEXT)))
  253.   LaunchInternetConnectConsole = True
  254. End Select
  255. End Function
  256. Sub ConnectToServer(IPAddy, PortNum)
  257. On Error GoTo Err77
  258. Call Internet.AddToInternetMessageBox("Connecting to " & IPAddy & "...")
  259.  
  260. ViewForm.ClientSock.RemotePort = PortNum
  261. ViewForm.ClientSock.RemoteHost = IPAddy
  262. ViewForm.ClientSock.Connect
  263. DataLines = 0
  264. StartTime = Timer
  265. Do
  266.   DoEvents
  267.   If Timer > StartTime + 5 Then GoTo Err77
  268.   If ServerData.ConnectedToServer = True Then Exit Do
  269. Loop
  270. ServerData.ServerIP = IPAddy
  271. ServerData.ServerPort = PortNum
  272. Call WaitForIncomingData
  273. LocalPlayer.PlayerIndex = Val(ReceivedData(1))
  274. Call GetRidOfDataLine
  275. Call SendData(CODE_ASSIGNPLAYERNICKNAME, LocalPlayer.NickName)
  276. Call WaitForIncomingData
  277. If ReceivedDataCodes(1) = CODE_USERLOGINFAILED Then
  278.   Call Internet.Disconnect
  279.   Call Internet.AddToInternetMessageBox("Nickname already in use.")
  280.   Call GetRidOfDataLine
  281.   Exit Sub
  282. ElseIf ReceivedDataCodes(1) = CODE_USERACCEPTED Then
  283.   Call Internet.AddToInternetMessageBox("Connection Accepted.")
  284.   Call GetRidOfDataLine
  285.   Players.Player(LocalPlayer.PlayerIndex).NickName = NickName
  286. End If
  287. Exit Sub
  288. Err77:
  289. Call Internet.Disconnect
  290. Exit Sub
  291. End Sub
  292. Sub Disconnect()
  293. On Error Resume Next
  294. Call SendData(CODE_LOGOFF, "Cya")
  295. DoEvents
  296. DoEvents
  297. DoEvents
  298. ViewForm.ClientSock.Close
  299. ServerData.ConnectedToServer = False
  300. Internet.DataLines = 0
  301. End Sub
  302. Sub SendData(DataCode, DataString)
  303. If Internet.ServerData.ConnectedToServer = True Then
  304.   ViewForm.ClientSock.SendData DataCode & DataString & "|"
  305.   DoEvents
  306. End If
  307. End Sub
  308. Sub WaitForIncomingData()
  309. Do
  310.   DoEvents
  311.   If Internet.DataLines > 0 Then
  312.     Exit Do
  313.   End If
  314. Loop
  315. End Sub
  316. Sub GetRidOfDataLine()
  317. Internet.DataLines = Internet.DataLines - 1
  318. For I = 1 To Internet.DataLines
  319.   ReceivedData(I) = ReceivedData(I + 1)
  320.   ReceivedDataCodes(I) = ReceivedDataCodes(I + 1)
  321. Next I
  322. End Sub
  323. Sub TransmitMessage(MessageText)
  324.  
  325. Call Internet.SendData(CODE_MESSAGE, MessageText)
  326. End Sub
  327. Sub AddToInternetMessageBox(DatTxt)
  328. LineSize = 33
  329. startposition = 1
  330. length = LineSize
  331. Do
  332.   If length + startposition > Len(DatTxt) Then length = Len(DatTxt) - startposition
  333.   Text = Mid$(DatTxt, startposition, length + 1)
  334.   Call AddMessage(Text)
  335.   If length + startposition = Len(DatTxt) Then Exit Do
  336.   startposition = startposition + LineSize + 1
  337. Loop
  338. End Sub
  339. Sub AddMessage(Text)
  340. Const NOLINESLEFT = -1
  341. DatTxt = MiscFunctions.RemoveSpaces(Text)
  342. CurrentLine = NOLINESLEFT
  343. For I = 1 To MaxMessages
  344.   If InternetMessageBox.LinesActive(I) = False Then
  345.     CurrentLine = I
  346.     Exit For
  347.   End If
  348. Next I
  349. If CurrentLine = NOLINESLEFT Then
  350.   For I = 1 To MaxMessages - 1
  351.     InternetMessageBox.LinesActive(I) = InternetMessageBox.LinesActive(I + 1)
  352.     InternetMessageBox.TextLines(I) = InternetMessageBox.TextLines(I + 1)
  353.   Next I
  354.   CurrentLine = MaxMessages
  355. End If
  356. InternetMessageBox.LinesActive(CurrentLine) = True
  357. InternetMessageBox.TextLines(CurrentLine) = DatTxt
  358. End Sub
  359. Sub MiscInternetDataHandler()
  360. Select Case Internet.ReceivedDataCodes(Internet.DataLines)
  361. Case CODE_MESSAGE
  362.   Call Internet.AddToInternetMessageBox(Internet.ReceivedData(Internet.DataLines))
  363.   Internet.DataLines = Internet.DataLines - 1
  364. Case CODE_SERVERSHUTDOWN
  365.   Call Internet.Disconnect
  366.   Call Internet.AddToInternetMessageBox(Internet.ReceivedData(Internet.DataLines))
  367. End Select
  368. End Sub
  369. Sub BreakDownMessage(MessageText)
  370. messagetxt = MessageText
  371. Do
  372.   'currtext = Left$(messagetxt, InStr(1, messagetxt, "|"))
  373.   Internet.DataLines = Internet.DataLines + 1
  374.   ReceivedDataCodes(Internet.DataLines) = Left$(messagetxt, 4)
  375.   ReceivedData(Internet.DataLines) = Mid$(messagetxt, 5, InStr(1, messagetxt, "|") - 5)
  376.   messagetxt = Right$(messagetxt, Len(messagetxt) - InStr(1, messagetxt, "|"))
  377.   Call Internet.MiscInternetDataHandler
  378.   If messagetxt = "" Then Exit Do
  379. Loop
  380. Internet.DataLines = Internet.DataLines + 1
  381. ReceivedDataCodes(Internet.DataLines) = Left$(SData, 4)
  382. ReceivedData(Internet.DataLines) = Right$(SData, Len(SData) - 4)
  383. Call Internet.MiscInternetDataHandler
  384. End Sub
  385. Sub IncomingDataHandler()
  386. Dim EventObject As Events.EventObj
  387. For I = 1 To Internet.DataLines
  388.   Select Case Internet.ReceivedDataCodes(I)
  389.   Case CODE_EVENT
  390.     EventObject.EventType = Left$(Internet.ReceivedData(I), Events.EventDataLength)
  391.     For I2 = 1 To Events.MaxEventParamaters
  392.       EventObject.Paramaters(I2) = Mid$(Internet.ReceivedData(I), (I2 * Events.EventDataLength) + 1, Events.EventDataLength)
  393.     Next I2
  394.     Call Events.RunEvent(EventObject)
  395.   End Select
  396. Next I
  397. Internet.DataLines = 0
  398. End Sub
  399.  
  400. Sub GetCurrentGameFromServer()
  401.  
  402. End Sub
  403.